home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland Pascal with Objects 7.0 / DOSDEMOS.ZIP / FIB8087.PAS < prev    next >
Pascal/Delphi Source File  |  1992-10-27  |  1KB  |  49 lines

  1. {************************************************}
  2. {                                                }
  3. { 8087 Stack Overflow Demo                       }
  4. { Copyright (c) 1985,90 by Borland International }
  5. {                                                }
  6. {************************************************}
  7.  
  8. {$N+,E+}
  9.  
  10. program Fib8087;
  11. {
  12.   Sample program from the Progammer's Guide that
  13.   demonstrates how to avoid 8087 stack overflow in recursive
  14.   functions that use the 8087 math co-processor. Local variables
  15.   are used to store temporary results on the 8086 stack.
  16. }
  17.  
  18. var
  19.   i : integer;
  20.  
  21. function Fib(N : integer) : extended;
  22. { calculate the fibonacci sequence for N }
  23. var
  24.   F1, F2 : extended;
  25. begin
  26.   if N = 0 then
  27.     Fib := 0.0
  28.   else
  29.     if N = 1 then
  30.       Fib := 1.0
  31.     else
  32.     begin
  33.       (* Use this line instead of the 3 lines that follow this
  34.          comment to cause an 8087 stack overflow for values of
  35.          N >= 8:
  36.       Fib := Fib(N - 1) + Fib(N - 2);  { will cause overflow for N > 8 }
  37.       *)
  38.  
  39.       F1 := Fib(N - 1);         { store results in temporaries on 8086 }
  40.       F2 := Fib(N - 2);         { stack to avoid 8087 stack overflow }
  41.       Fib := F1 + F2;
  42.     end;
  43. end; { Fib }
  44.  
  45. begin
  46.   for i := 0 to 15 do
  47.     Writeln(i, '. ', Fib(i));
  48. end.
  49.